<#include "common/ReuseLogging.ftl">
try {
    node.${nodeId}<#if loop> + '_' + loopIndex</#if> = await ${nodeId}(node.${parentNodeId}<#if loop> + '_' + loopIndex</#if>, node <#if loop>, loopIndex</#if>);
    <#if loop> node.${nodeId}.push(node.${nodeId}<#if loop> + '_' + loopIndex</#if>);</#if>
    if (node.${nodeId}<#if loop> + '_' + loopIndex</#if> && (node.${nodeId}<#if loop> + '_' + loopIndex</#if> instanceof Interceptor)) {
        try {
            await node.${nodeId}<#if loop> + '_' + loopIndex</#if>.intercept(node${nodeId}<#if loop> + '_' + loopIndex</#if>, options);
        } catch (e) {
            throw e;
        }
    }
    debugLogging.assignOutput(node.${nodeId}<#if loop> + '_' + loopIndex</#if>);
} catch (e) {
    <#include "common/Catch.ftl">
} finally {
    logEndTime = DebugLogging.getTimestamp();
    debugLogging.assignCommNoOutputParam('${nodeId}', '${nodeType}', '${nodeName}', node.${parentNodeId}<#if loop> + '_' + loopIndex</#if>, logStartTime, logEndTime);
    node.debugLog.push(debugLogging);
}
